﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BUS;
using DTO;

namespace GUI
{
    public partial class FormNhanVien : Form
    {
        public FormNhanVien()
        {
            InitializeComponent();
        }
        
        //public NHANVIENDTO NVDTO;

        private void rdiAll_CheckedChanged(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            NHANVIENBUS NVBus = new NHANVIENBUS();
            if (rdiAll.Checked)
            {                
                dt = NVBus.LayDSNV();
                dtgNhanVien.DataSource = dt;
            }                      
        }

        public void FormNhanVien_Load(object sender, EventArgs e)
        {
            Load_cboCV();
            Load_cboCVtabThem();
            Load_cboCVtabSua();
            cboChucVu.SelectedIndex = 0;
            rdiChucVu.Checked = true;
            rdiAll.Checked = true;
        }

        private void Load_cboCV()
        {
            DataTable dt = new DataTable();
            CHUCVUBUS CvBus = new CHUCVUBUS();
            dt = CvBus.LayDSCV();
            cboChucVu.DataSource = dt;
            cboChucVu.DisplayMember = "TenCV";
            cboChucVu.ValueMember = "MaCV";
        }
        private void Load_cboCVtabThem()
        {
            DataTable dt = new DataTable();
            CHUCVUBUS CvBus = new CHUCVUBUS();
            dt = CvBus.LayDSCV();
            
            cboCVtabThem.DataSource = dt;
            cboCVtabThem.DisplayMember = "TenCV";
            cboCVtabThem.ValueMember = "MaCV";
        }
        private void Load_cboCVtabSua()
        {
            DataTable dt = new DataTable();
            CHUCVUBUS CvBus = new CHUCVUBUS();
            dt = CvBus.LayDSCV();

            cboCVtabSua.DataSource = dt;
            cboCVtabSua.DisplayMember = "TenCV";
            cboCVtabSua.ValueMember = "MaCV";
        }

        private void rdiChucVu_CheckedChanged(object sender, EventArgs e)
        {
            if (rdiChucVu.Checked)
            {
                dtgNhanVien.DataSource = null;
                cboChucVu.Enabled = true;
                cboChucVu_SelectedIndexChanged(sender, e);
            }
            else cboChucVu.Enabled = false;
        }

        private void cboChucVu_SelectedIndexChanged(object sender, EventArgs e)
        {
            CHUCVUDTO CvDTO = new CHUCVUDTO();
            DataTable dt = new DataTable();
            NHANVIENBUS NvBUS = new NHANVIENBUS();
            if (cboChucVu.SelectedValue.ToString() != "System.Data.DataRowView")
            {        
                CvDTO.MaCV = (int)cboChucVu.SelectedValue;
                dt = NvBUS.LayDSNVtheoCV(CvDTO);
                dtgNhanVien.DataSource = dt;

                txtMaSua.Text = "";
                txtMaXoa.Text = "";
            }
            else
            {               
                return;
            }
        }

        private void bntReset_Click(object sender, EventArgs e)
        {
            txtTenThem.Text = "";
            txtMKthem.Text = "";
            txtNhaplai.Text = "";
            txtTenThem.Focus();
        }

        private bool compute(string s1, string s2)
        {
            return s1 == s2;
        }
        private bool isNull(string s1, string s2, string s3)
        {
            if (s1 == "" || s2 == "" || s3 == "") return true;
            else return false;
        }
        private void bntOK_Click(object sender, EventArgs e)
        {
            string ten, mk, mk2;
            int macv;
            ten = txtTenThem.Text.Trim();
            mk = txtMKthem.Text.Trim();
            mk2 = txtNhaplai.Text.Trim();
            macv = (int) cboCVtabThem.SelectedValue;
            if (isNull(ten, mk, mk2))
            {
                MessageBox.Show("Yêu cầu nhập đủ thông tin", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (isToLong(ten) || isToLong(mk))
            {
                MessageBox.Show("Nhập tên hoặc mật khẩu quá dài!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            if (!compute(mk, mk2))
            {
                MessageBox.Show("Mật khẩu nhập lại không giống! Nhập lại!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtNhaplai.Text = "";
                txtNhaplai.Focus();
                return;
            }
            NHANVIENBUS NvBUS = new NHANVIENBUS();
            NHANVIENDTO NvDTO = new NHANVIENDTO();
            NvDTO.TenNV = ten;
            NvDTO.MatKhau = mk;
            NvDTO.MaCV = macv;
            int kq;
            kq = NvBUS.ThemNV(NvDTO);
            if (kq == 0)
            {
                MessageBox.Show("Thêm thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.None);
                rdiChucVu.Checked = true;
                rdiAll.Checked = true;
                bntReset_Click(sender,e);
            }
            else MessageBox.Show("Thêm thất bại!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void dtgNhanVien_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            txtMaSua.Text = dtgNhanVien.CurrentRow.Cells[0].Value.ToString();
            txtTenSua.Text = dtgNhanVien.CurrentRow.Cells[1].Value.ToString();

            txtMaXoa.Text = dtgNhanVien.CurrentRow.Cells[0].Value.ToString();
            txtTenXoa.Text = dtgNhanVien.CurrentRow.Cells[1].Value.ToString();
            txtCVxoa.Text = dtgNhanVien.CurrentRow.Cells[2].Value.ToString();

           
        }

        private void suaVoiMK(int manv, string ten, string mk, int macv)
        {
            NHANVIENBUS NvBUS = new NHANVIENBUS();
            NHANVIENDTO NvDTO = new NHANVIENDTO();
            NvDTO.MaNV = manv;
            NvDTO.TenNV = ten;
            NvDTO.MatKhau = mk;
            NvDTO.MaCV = macv;

            int kq = NvBUS.SuaNVkoMK(NvDTO);
            if (kq == 0)
            {
                MessageBox.Show("Sửa thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.None);
                rdiChucVu.Checked = true;
                rdiAll.Checked = true;
            }
            else MessageBox.Show("Thêm thất bại!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void suaKoMK(int manv, string ten, int macv)
        {
            NHANVIENBUS NvBUS = new NHANVIENBUS();
            NHANVIENDTO NvDTO = new NHANVIENDTO();
            NvDTO.MaNV = manv;
            NvDTO.TenNV = ten;
            NvDTO.MaCV = macv;

            int kq = NvBUS.SuaNVkoMK(NvDTO);
            if (kq == 0)
            {
                MessageBox.Show("Sửa thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.None);
                rdiChucVu.Checked = true;
                rdiAll.Checked = true;
            }
            else MessageBox.Show("Thêm thất bại!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void bntOKsua_Click(object sender, EventArgs e)
        {
            string ten, mk1, mk2;
            int macv, manv;
            ten = txtTenSua.Text.Trim();
            mk1 = txtMKsua.Text.Trim();
            mk2 = txtMKsua2.Text.Trim();
            manv = int.Parse(txtMaSua.Text.Trim());
            macv = (int)cboCVtabSua.SelectedValue;

            if(MessageBox.Show("Bạn có chắc muốn sửa?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;
            
            if (ten == "")
            {
                MessageBox.Show("Yêu cầu nhập tên!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtTenSua.Focus();
                return;
            }
            if (mk1 == "" && mk2 == "")
            {
                suaKoMK(manv,ten,macv);
            }
            else 
            {
                if (!compute(mk1, mk2))
                {
                    MessageBox.Show("Mật khẩu nhập lại không giống! Nhập lại!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtMKsua2.Text = "";
                    txtMKsua2.Focus();
                    return;
                }
                else suaVoiMK(manv, ten, mk1, macv);
            }
        }

        private bool isToLong(string s)
        {
            if (s.Length > 50) return true;
            return false;
        }

        private void bntOKxoa_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có chắc muốn xóa?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;
            NHANVIENBUS NvBUS = new NHANVIENBUS();
            NHANVIENDTO NvDTO = new NHANVIENDTO();
            NvDTO.MaNV = int.Parse(txtMaXoa.Text.Trim());
            int ktNhanVien = NvBUS.ktNV(NvDTO);
            if (ktNhanVien > 0)
            {
                MessageBox.Show("Nhân viên tồn tại trong hóa đơn chưa thanh toán. \n Không thể xóa!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            int kq = NvBUS.XoaNV(NvDTO);
            if (kq == 0)
            {
                MessageBox.Show("Xóa thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.None);
                rdiChucVu.Checked = true;
                rdiAll.Checked = true;
            }
        }

        private void bntTim_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            NHANVIENBUS NvBUS = new NHANVIENBUS();
            NHANVIENDTO NvDTO = new NHANVIENDTO();
            NvDTO.TenNV = txtTenTim.Text.Trim();
            dt = NvBUS.TimNVtheoTen(NvDTO);
            dtgNhanVien.DataSource = dt;
        }
        
        private void tabControl1_MouseClick(object sender, MouseEventArgs e)
        {
            if ((txtMaXoa.Text =="" || txtMaSua.Text.Trim() == "") && dtgNhanVien.RowCount>1)
            {
                dtgNhanVien.CurrentCell = dtgNhanVien[0, 0];
                dtgNhanVien.Rows[0].Selected = true;
                txtMaSua.Text = dtgNhanVien.CurrentRow.Cells[0].Value.ToString();
                txtTenSua.Text = dtgNhanVien.CurrentRow.Cells[1].Value.ToString();
            }
        }

        private void txtMaSua_TextChanged(object sender, EventArgs e)
        {
            if (txtMaSua.Text == "")
            {
                bntOKsua.Enabled = false;
                return;
            }
            else 
            {
                bntOKsua.Enabled = true;
            }
            NHANVIENBUS NvBUS = new NHANVIENBUS();
            NHANVIENDTO NvDTO = new NHANVIENDTO();
            NvDTO.MaNV = Int32.Parse(txtMaSua.Text);
            int MaCV = NvBUS.LayMaChucVu(NvDTO);

            for (int i = 0; i < cboCVtabSua.Items.Count; i++)
            {
                int x = int.Parse( ((DataRowView)cboCVtabSua.Items[i])["MaCV"].ToString());
                if (x == MaCV)
                {
                    cboCVtabSua.SelectedIndex = i;
                    return;
                }
            }
        }

        private void bntQLcv_Click(object sender, EventArgs e)
        {
            FormQLChucVu frm = new FormQLChucVu();
            frm.frmCha = this;
            frm.ShowDialog();
        }

        private void bntPhanQuyen_Click(object sender, EventArgs e)
        {
            frmPhanQuyen frm = new frmPhanQuyen();
            frm.ShowDialog();
        }

        private void txtMaXoa_TextChanged(object sender, EventArgs e)
        {
            if (txtMaXoa.Text == "") bntOKxoa.Enabled = false;
            else bntOKxoa.Enabled = true;
        }

        private void bntDLxoa_Click(object sender, EventArgs e)
        {
            frmDuLieuXoa frm = new frmDuLieuXoa();
            frm.frmCha = this;
            frm.ShowDialog();
        }                      
    }
}
